package protocol

type Message struct {
	Type      string      `json:"type"`      // 消息类型：对应上述定义的消息类型常量
	ID        string      `json:"id"`        // 消息ID：唯一标识符，用于请求-响应匹配
	Timestamp int64       `json:"timestamp"` // 时间戳：消息创建时间（Unix时间戳）
	IsGroup   bool        `json:"is_group"`  // 时间戳：消息创建时间（Unix时间戳）
	NeedAck   bool        `json:"need_ack"`  // 是否需要回复消息确认
	UserId    int64       `json:"user_id"`
	Channel   string      `json:"channel"` // 是否需要回复消息确认
	Data      interface{} `json:"data"`    // 消息数据：具体的请求或响应数据，类型根据消息类型而定
}

func (s *Message) GetType() string {
	return s.Type
}
func (s *Message) GetId() string {
	return s.ID
}
func (s *Message) GetTimestamp() int64 {
	return s.Timestamp
}
func (s *Message) GetNeedAck() bool {
	return s.NeedAck
}
func (s *Message) GetData() interface{} {
	return s.Data
}
func (s *Message) SetChannel(channelId string) {
	s.Channel = channelId
}
func (s *Message) GetUserId() int64 {
	return s.UserId
}

func (s *Message) ToMap() map[string]interface{} {
	return map[string]interface{}{
		"type":      s.Type,
		"id":        s.ID,
		"user_id":   s.UserId,
		"timestamp": s.Timestamp,
		"need_ack":  s.NeedAck,
		"channel":   s.Channel,
		"is_group":  s.IsGroup,
		"data":      s.Data,
	}
}
